package com.goldsprite.projecttemplategenerator.test;

import org.yaml.snakeyaml.DumperOptions;

import java.util.Map;

public class YamlUtils {
	private static DumperOptions prettyOptions;

	public static DumperOptions getPrettyDumperOptions() {
		if(prettyOptions == null) {
			// 配置格式选项
			prettyOptions = new DumperOptions();
			prettyOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); // 使用块样式
			prettyOptions.setIndent(2); // 缩进为 2
			prettyOptions.setPrettyFlow(true); // 美化输出
			//prettyOptions.setDefaultScalarStyle(DumperOptions.ScalarStyle.DOUBLE_QUOTED); // 强制加引号
		}
		return prettyOptions;
	}

	/**
	 * 获取指定路径的值，并转换为指定类型
	 *
	 * @param path  用点分隔的键路径，如 "project.project-name.old"
	 * @param clazz 返回值类型的 Class
	 * @param <T>   返回值类型
	 * @return 转换后的值，若路径不存在或类型不匹配，返回 null
	 */
	@SuppressWarnings("unchecked")
	public static  <T> T getNestedVal(Map<String, Object> yamlData, String path, Class<T> clazz) {
		String[] keys = path.split("\\.");
		Object current = yamlData;

		// 逐级解析路径
		for (String key : keys) {
			if (current instanceof Map) {
				current = ((Map<String, Object>) current).get(key);
			}
		}

		// 尝试将结果转换为目标类型
		if (clazz.isInstance(current)) {
			return clazz.cast(current);
		}
		return null; // 类型不匹配或路径不存在
	}
}
